package com.foruo.learn.designmode.iterator;

import java.util.Arrays;

/**
 * 具体的聚合对象 - 模拟ArrayList部分内容
 * @author GaoYuan
 * @date 2018/11/11 上午10:28
 */
public class MyList implements List{

    /** 当前数据数组 - 初始为空 */
    private Object[] list = {};

    /** 遍历的下标索引 - 初始为0 */
    private int index = 0;

    /** 当前元素的个数 */
    private int size = 0;

    /** 容量 */
    private int capacity = 16;

    public MyList() {
        list = new Object[capacity];
        index = 0;
        size = 0;
    }

    @Override
    public void add(Object o) {
        if(size >= capacity){
            // 需要扩容，扩容两倍
            capacity = capacity * 2;
            list = Arrays.copyOf(list, capacity);
        }
        list[index++] = o;
        size ++;
    }

    @Override
    public Object get(int index) {
        return list[index];
    }

    @Override
    public Iterator iterator() {
        // 将当前聚合对象传递至迭代器 - 这里可以选择不同的具体迭代器
        return new MyIterator(this);
    }

    @Override
    public int getSize() {
        return size;
    }
}
